package com.su.common.vo;

import com.su.common.constants.ErrorCodeEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;

/**
 * @Author 大哥
 * @Description : 统一的响应对象
 * @DateTime : 2021/12/15 9:38
 **/
@Data
@ApiModel(value = "统一的响应对象")
public class ReturnResult implements Serializable {

    private static final long serialVersionUID = 4849087550620538822L;
    @ApiModelProperty(value = "是否成功标示，true：成功；false：失败")
    private String success;
    @ApiModelProperty(value = "异常码")
    private String errorCode;
    @ApiModelProperty(value = "响应提示信息")
    private String msg;
    @ApiModelProperty(value = "响应数据")
    private Object data;

    /**
     * @Author:大哥
     * @Description : 正常响应
     * @DateTime : 9:39 2021/12/15
     * @Param :
     * @Return :
     **/
    public static ReturnResult ok() {
        return ok(ErrorCodeEnum.OK);
    }


    /**
     * @Author:大哥
     * @Description : 正常响应
     * @DateTime : 9:39 2021/12/15
     * @Param : errorCodeEnum 错误枚举类
     * @Return :
     **/
    public static ReturnResult ok(ErrorCodeEnum errorCodeEnum) {
        return ok(errorCodeEnum, null);
    }


    /**
     * @Author:大哥
     * @Description : 正常响应
     * @DateTime : 9:39 2021/12/15
     * @Param :   data 数据
     * @Return :
     **/
    public static ReturnResult ok(Object data) {
        return ok(ErrorCodeEnum.OK, data);
    }


    /**
     * @Author:大哥
     * @Description : 正常响应
     * @DateTime : 9:46 2021/12/15
     * @Param : errorCodeEnum 错误码枚举  data 数据
     * @Return :
     **/
    public static ReturnResult ok(ErrorCodeEnum errorCodeEnum, Object data) {
        return new ReturnResult(String.valueOf(true), errorCodeEnum.getErrorCode(), errorCodeEnum.getMsg(), data);
    }


    /**
     * @Author:大哥
     * @Description : 异常响应
     * @DateTime : 9:47 2021/12/15
     * @Param :
     * @Return :
     **/
    public static ReturnResult error() {
        return error(ErrorCodeEnum.SYSTEM_EXECUTION_ERROR);
    }


    /**
     * @Author:大哥
     * @Description : 异常响应
     * @DateTime : 9:47 2021/12/15
     * @Param : errorCodeEnum 错误码枚举
     * @Return :
     **/
    public static ReturnResult error(ErrorCodeEnum errorCodeEnum) {
        return error(errorCodeEnum.getErrorCode(), errorCodeEnum.getMsg());
    }


    /**
     * @Author:大哥
     * @Description : 异常响应
     * @DateTime : 9:47 2021/12/15
     * @Param :   errorCode 内部错误码 msg 错误信息
     * @Return :
     **/
    public static ReturnResult error(String errorCode, String msg) {
        return error(false, errorCode, msg);
    }


    /**
     * @param :errorCode 内部错误码
     * @param :          errorCode 内部错误码
     * @param :          msg 错误信息
     * @Author:大哥
     * @Description :
     * @DateTime : 9:48 2021/12/15
     * @Param : success 是否成功标示
     * @Return :
     **/
    public static ReturnResult error(Boolean success, String errorCode, String msg) {
        return error(success, errorCode, msg, null);
    }


    /**
     * @param :errorCode 内部错误码
     * @param :          msg 错误信息
     * @param :          data 数据
     * @Author:大哥
     * @Description : 异常响应
     * @DateTime : 9:58 2021/12/15
     * @Param : success 是否成功标示,成功为true;失败为false,一般情况下为true
     * @Return :
     **/
    public static ReturnResult error(Boolean success, String errorCode, String msg, Object data) {
        return new ReturnResult(String.valueOf(success), errorCode, msg, data);
    }


    private ReturnResult(String success, String errorCode, String msg, Object data) {
        this.success = success;
        this.errorCode = errorCode;
        this.msg = msg;
        this.data = data;
    }

    private ReturnResult() { }

}
